using System;
//using System.Xml.Linq;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
//using System.Linq;
//using Utiles.UtilInfragistics;
using Infragistics.Win;
using Infragistics.Win.UltraWinGrid;
using System.ComponentModel;
//using clsVariables;
//using clsBBDD;
using Utiles;
using Alias_ActiveReports = DataDynamics.ActiveReports;
using Alias_UltraWinGrid = Infragistics.Win.UltraWinGrid;
//using Utiles.General;

#region  Notas
//SC: MEjor lo hago por BBDD
//#Region "                                                               bol_MostrarExportacionExcel"
//Private p_bol_MostrarExportacionExcel As Boolean = False
//<Category(clsVariables.str_NombreAplicacion), Description("Mostrar la opción de exportar Excel")> _
//Public Property bol_MostrarExportacionExcel() As Boolean
//   Get
//      Return p_bol_MostrarExportacionExcel
//   End Get
//   Set(ByVal value As Boolean)
//      p_bol_MostrarExportacionExcel = value
//   End Set
//End Property
//#End Region
//'
#endregion
//'
#region  Imports
#endregion
//'
public partial class Ctrl_NavBase
{
   #region                               Variables
   //Private DtOrigenDatos, DtNavCabecerayFiltros As DataTable
   //private Ctrl_UltraGrid ugCampos;
   //private Ctrl_UltraGrid ugFiltros;
   private string sSql = string.Empty;
   private string p_ObjetoFuenteNoVista; //Si el objeto fuente es una vista aquí se almacena la tabla
   private mtoBase frmMantenimiento;
   private bool bolCargaAlIniciar;
   private DataDynamics.ActiveReports.ActiveReport3 rptNavegador;
   private DataTable dtDefinicionCampos; // Almacena información de los campos (tabla campos)
   public delegate void AntesLoadNavegadorEventHandler();
   private AntesLoadNavegadorEventHandler AntesLoadNavegadorEvent;

   public event AntesLoadNavegadorEventHandler AntesLoadNavegador
   {
      add
      {
         AntesLoadNavegadorEvent = (AntesLoadNavegadorEventHandler)System.Delegate.Combine(AntesLoadNavegadorEvent, value);
      }
      remove
      {
         AntesLoadNavegadorEvent = (AntesLoadNavegadorEventHandler)System.Delegate.Remove(AntesLoadNavegadorEvent, value);
      }
   }
   //
   #region                                                                _bolUsuariosFechasAutomatico
   /// <summary>
   /// Si se cargará en el grid de campos del navegador el user de creación y modificación automáticamente
   /// </summary>
   /// <value></value>
   /// <returns></returns>
   /// <remarks></remarks>
   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Category(clsVariables.str_NombreAplicacion), Description("Si se cargará en el grid de campos del navegador el user de creación y modificación automáticamente")]
   public bool _bolUsuariosFechasAutomatico { get; set; }
   #endregion
   //
   #region                                                                NavegadorInfoExtra
   public enum EPanelInfoExtra { Panel1, Panel2, Panel3 }
   ////
   ///// <summary>
   ///// Info extra q mostrará el navegador. Al lado izdo del contador de registros
   ///// </summary>
   ///// <value></value>
   ///// <returns></returns>
   ///// <remarks></remarks>
   //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Category(clsVariables.str_NombreAplicacion), Description("Info que mostrará en el panel de info extra del navegador")]
   //public string NavegadorInfoExtra
   //{
   //   get
   //   {
   //      return usbPie.Panels["InfoExtra"].Text;
   //   }
   //   set
   //   {
   //      usbPie.Panels["InfoExtra"].Text = value;
   //   }
   //}
   #endregion
   //
   #region                                                                ObjetoFuente
   private string p_ObjetoFuente;
   [Category(clsVariables.str_NombreAplicacion), Description("Objeto Fuente del navegador")]
   public string ObjetoFuente
   {
      get
      {
         return p_ObjetoFuente;
      }
      set
      {
         p_ObjetoFuente = value;
         if (value != null)
         {
            p_ObjetoFuenteNoVista = value.Replace("vis", "");
         }
      }
   }
   #endregion
   //
   #region                                                                OrigenDatos
   [Category(clsVariables.str_NombreAplicacion), Description("Si el \'ObjetoFuente\' sale de \'sistema\' o \'cliente\'")]
   public clsVariables.e_TipoOrigen OrigenDatos { get; set; }
   #endregion
   //
   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
   public int TotalRegistros //Asignar el numero de registros
   {
      set
      {
         usbPie.Panels["usbRegistroTotal"].Text = value.ToString();
      }
   }
   //
   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
   public int RegistroActual //Asignar el numero de registros
   {
      set
      {
         usbPie.Panels["usbRegistroActual"].Text = value.ToString();
      }
   }
   //
   #region "                                                               FormNavegador"
   private Form p_FormNavegador;
   public Form FormNavegador
   {
      get { return p_FormNavegador; }
      set { p_FormNavegador = value; }
   }
   #endregion
   //
   #region                                                                IdNavegador
   private int p_IdNavegador = 0; //No puedo carga el navegador aquí pq sino cargaría todos los navegadores al iniciar menú
   [Category(clsVariables.str_NombreAplicacion), Description("Identificador único del navegador")]
   public int IdNavegador
   {
      get
      {
         return p_IdNavegador;
      }
      set
      {
         p_IdNavegador = value;
      }
   }
   #endregion
   //
   #region                                                                bolNavTipoGrid
   private bool p_bolNavTipoGrid = false;
   /// <summary>
   /// Si el navegador solo tiene el grid de campos Ocultando la sección de filtros
   /// </summary>
   /// <value></value>
   /// <returns></returns>
   /// <remarks></remarks>
   [Category(clsVariables.str_NombreAplicacion), Description("Si el navegador solo tiene el grid de campos Ocultando la sección de filtros")]
   public bool bolNavTipoGrid
   {
      get
      {
         return p_bolNavTipoGrid;
      }
      set
      {
         p_bolNavTipoGrid = value;
         bolOcultarSalir = value;
         //sc_Principal.Panel1Collapsed = value
         //'Me.utmCabecera.DockWithinContainer = Me
         //'Me.utmCabecera.DockWithinContainerBaseType = GetType(System.Windows.Forms.Form)
         //utmCabecera.DockWithinContainer = IIf(value, Nothing, Me) 'utmCabecera.Visible = value
         //With utmMedio
         //   .UseLargeImagesOnMenu = Not value : .UseLargeImagesOnToolbar = Not value
         //End With
      }
   }
   #endregion
   //
   #region                                                                bolBusquedatiempoReal
   private bool p_bolBusquedatiempoReal;
   [Category(clsVariables.str_NombreAplicacion), Description("Sino hace falta pulsar el botón de filtro para que filtre resultados." + "Ojo pq. esta opción hace una consulta por cada pulsación de tecla. Puede aumentar el tiempo de ejecución")]
   public bool bolBusquedatiempoReal
   {
      get
      {
         return p_bolBusquedatiempoReal;
      }
      set
      {
         p_bolBusquedatiempoReal = value;
      }
   }
   #endregion
   //
   #region                                                                bolMasUnaInstancia
   //Private p_bolMasUnaInstancia As Boolean
   public bool bolMasUnaInstancia
   {
      get
      {
         //Return p_bolMasUnaInstancia
         return clsBBDD.DevolverBooleano(clsBBDD.ObtenerString("SELECT bolMasUnaInstancia From navcabecera Where idnav =" + IdNavegador, clsVariables.e_TipoOrigen.Sistema, ""));
      }
      //Set(ByVal value As Boolean)
      //   p_bolMasUnaInstancia = value
      //End Set
   }
   #endregion
   //
   #region                                                                bolOcultarSalir
   private bool p_bolOcultarSalir;
   /// <summary>
   /// Si el botón salir esta visible o no. Si es nav tipo grid siempre estará oculto
   /// </summary>
   /// <value></value>
   /// <returns></returns>
   /// <remarks></remarks>
   [Category(clsVariables.str_NombreAplicacion), Description("Si el botón salir esta visible o no. Si es nav tipo grid siempre estará oculto")]
   public bool bolOcultarSalir
   {
      get
      {
         return p_bolOcultarSalir;
      }
      set
      {
         p_bolOcultarSalir = value;
      }
   }
   #endregion

   #endregion
   //'
   public Ctrl_NavBase()
   {
      InitializeComponent(); // Llamada necesaria para el Diseñador de Windows Forms.
      // Agregue cualquier inicialización después de la llamada a InitializeComponent().
      ugFiltros.IniciarEstandarControl(); ugCampos.IniciarEstandarControl();
   }
   //'
   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
   private void navBase_Shown(object sender, System.EventArgs e)
   {
      //Salvar el nombre del navegador
      if (!DesignMode)
      {
         if (clsBBDD.EjecutarExecuteNonQuery("UPDATE navcabecera set nombrenav = \'" + Name + "\' WHERE idnav = " + IdNavegador, clsVariables.e_TipoOrigen.Sistema) != 1)
         {
            Utiles.Errores.LanzarError(FormNavegador, "navBase_Shown", "Error al actualizar nombre navegador " + Name + " con id " + IdNavegador, null, MessageBoxIcon.Exclamation, true);
         }
      }
   }
   //'
   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
   public void Me_Load(object sender, System.EventArgs e) //NO poner en el diseñador pq. ya hay una llamada
   {
      DataTable dTgrid;
      if (this.Parent is navBase) { p_FormNavegador = (Form)this.Parent; }
      System.Reflection.Assembly m_asmAssembly;
      //'
      try
      {
         if (DesignMode)
         {
            return;
         }
         //Config Barra
         Utiles.UtilInfragistics.Ctrl_UltraToolbarsManager.ScpEstandarBarra(ref utmMedio); //Antes
         clsControlColores.CambiarColorBarra(utmMedio);
         //
         if (AntesLoadNavegadorEvent != null) //Para asignador idnavegador, objetofuente, etc.. antes del Load de otro form
            AntesLoadNavegadorEvent();
         //'Configurar apariencia grid general
         //UtilGrid.ConfigurarGrid(ugObjetosUsuarios): UtilGrid.ConfigurarGrid(ugUsuariosObjetos)
         //
         if (bolNavTipoGrid)
         {
            sc_Principal.Panel1Collapsed = bolNavTipoGrid;
            //Me.utmCabecera.DockWithinContainer = Me
            //Me.utmCabecera.DockWithinContainerBaseType = GetType(System.Windows.Forms.Form)
            utmCabecera.DockWithinContainer = bolNavTipoGrid ? null : this; //utmCabecera.Visible = value
            utmMedio.UseLargeImagesOnMenu = !bolNavTipoGrid;

            utmMedio.UseLargeImagesOnToolbar = !bolNavTipoGrid;
            // .Tools("Salir").SharedProps.Visible = bolOcultarSalir 'Ocultar botón salir
            //.Tools("Eliminar").SharedProps.Visible = False 'Ya lo deshabilita más adelante. En AplicarFiltroComun pero cuando es 'bolNavTipoGrid' no llega.Lo hago aki tb
            //
         }
         else
         {
            //Config Barra
            Utiles.UtilInfragistics.Ctrl_UltraToolbarsManager.ScpEstandarBarra(ref utmCabecera);
            clsControlColores.CambiarColorBarra(utmCabecera);
         }
         //
         //ugCampos = new Ctrl_UltraGrid();
         ugCampos.DoubleClickRow += new Alias_UltraWinGrid.DoubleClickRowEventHandler(Editar);
         ugCampos.BeforeRowActivate += new Alias_UltraWinGrid.RowEventHandler(ugCampos_BeforeRowActivate);
         ugCampos.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugCampos_InitializeLayout);
         //ugCampos.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugCampos.Ctrl_UltraGrid_InitializeLayout);
         ugCampos.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugCampos.ulg_ActualizarCelda);
         ugCampos.BeforeRowsDeleted += new Alias_UltraWinGrid.BeforeRowsDeletedEventHandler(ugCampos.ulg_ActualizarCelda);

         //ugFiltros = new Ctrl_UltraGrid();
         ugFiltros.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
         ugFiltros.CellChange += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
         ugFiltros.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugFiltros_InitializeLayout);
         //ugFiltros.InitializeLayout += new Alias_UltraWinGrid.InitializeLayoutEventHandler(ugFiltros.Ctrl_UltraGrid_InitializeLayout);
         ugFiltros.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugFiltros.ulg_ActualizarCelda);
         ugFiltros.BeforeRowsDeleted += new Alias_UltraWinGrid.BeforeRowsDeletedEventHandler(ugFiltros.ulg_ActualizarCelda);
         //
         //Crear un DT para agregarlo al GRid (no se puede crear directo según Infra. Necesita un objeto)
         dTgrid = new DataTable();
         //Añadir las columnas necesarias
         dTgrid.Columns.Add("Campos", typeof(string));
         dTgrid.Columns.Add("CamposTitulo", typeof(string));
         dTgrid.Columns.Add("Condiciones", typeof(string));
         dTgrid.Columns.Add("ValorFiltro", typeof(string));
         dTgrid.Columns.Add("strWhere", typeof(string));
         //
         //sc_Principal.Panel1.Controls.Add(ugFiltros);
         //Panel2_Fill_Panel.Controls.Add(ugCampos); //sc_Principal.Panel2.Controls.Add(ugCampos)
         //
         ugFiltros.bol_Agrupar = false;
         ugFiltros.bol_PermitirFiltrar = false;
         ugFiltros.bol_PermitirEditar = true;
         ugFiltros.bol_PermitirOrdenar = false;
         ugFiltros.DataSource = dTgrid; //Se carga en el Initialiteayout
         //
         ugCampos.bol_PermitirFijar = true;
         //
         SetImagenesBotones();
         //
         m_asmAssembly = System.Reflection.Assembly.GetExecutingAssembly();
         frmMantenimiento = (mtoBase)m_asmAssembly.CreateInstance(String.Format("mto{0}", p_ObjetoFuenteNoVista), true); //, True, Reflection.BindingFlags.CreateInstance, Nothing,p_ObjetoFuente )
         rptNavegador = (Alias_ActiveReports.ActiveReport3)m_asmAssembly.CreateInstance(clsVariables.str_NombreAplicacion + ".rpt" + p_ObjetoFuenteNoVista, true);
         //
         if (frmMantenimiento == null)
         {
            utmMedio.Tools["Editar"].SharedProps.Visible = false; // Not frmMantenimiento Is Nothing
            utmMedio.Tools["Anyadir"].SharedProps.Visible = false; //Not frmMantenimiento Is Nothing
         }
         //
         utmMedio.Tools["Salir"].SharedProps.Visible = !bolOcultarSalir; //Ocultar botón salir
         utmMedio.Tools["Imprimir"].SharedProps.Visible = rptNavegador != null;
         //
         if (clsVariables.bol_Pruebas)
         {
            usbPie.Panels["usbIdNav"].Text = "Id Navegador: " + IdNavegador;
            usbPie.Panels["usbObjetoFuente"].Text = "- Objeto Fuente: " + p_ObjetoFuente;
         }
         //
      }
      catch (Exception ex)
      {
         //ugCampos = null;
         //ugFiltros = null;
         dTgrid = null;
         Utiles.Errores.LanzarError(FormNavegador, "Load navBase", "", ex, MessageBoxIcon.Exclamation, true);
      }
   }
   //'
   private void SetImagenesBotones()
   {
      //Imagenes botones
      Infragistics.Win.UltraWinToolbars.SharedProps with_2 = utmCabecera.Tools["AplicarFiltro"].SharedProps;
      with_2.AppearancesLarge.Appearance.Image = clsImagenes.Filtrar;
      with_2.AppearancesSmall.Appearance.Image = with_2.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_3 = utmCabecera.Tools["BorrarFiltro"].SharedProps;
      with_3.AppearancesLarge.Appearance.Image = clsImagenes.EliminarFiltro;
      with_3.AppearancesSmall.Appearance.Image = with_3.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_4 = utmCabecera.Tools["OcultarFiltro"].SharedProps;
      with_4.AppearancesLarge.Appearance.Image = clsImagenes.OcultarFiltro;
      with_4.AppearancesSmall.Appearance.Image = with_4.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_5 = utmCabecera.Tools["MostrarFiltro"].SharedProps;
      with_5.AppearancesLarge.Appearance.Image = clsImagenes.MostrarFiltro;
      with_5.AppearancesSmall.Appearance.Image = with_5.AppearancesLarge.Appearance.Image;
      //
      Infragistics.Win.UltraWinToolbars.SharedProps with_7 = utmMedio.Tools["Salir"].SharedProps;
      with_7.AppearancesLarge.Appearance.Image = clsImagenes.Salir;
      with_7.AppearancesSmall.Appearance.Image = with_7.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_8 = utmMedio.Tools["Anyadir"].SharedProps;
      with_8.AppearancesLarge.Appearance.Image = clsImagenes.Anyadir;
      with_8.AppearancesSmall.Appearance.Image = with_8.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_9 = utmMedio.Tools["Editar"].SharedProps;
      with_9.AppearancesLarge.Appearance.Image = clsImagenes.Editar;
      with_9.AppearancesSmall.Appearance.Image = with_9.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_10 = utmMedio.Tools["Eliminar"].SharedProps;
      with_10.AppearancesLarge.Appearance.Image = clsImagenes.Eliminar;
      with_10.AppearancesSmall.Appearance.Image = with_10.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_11 = utmMedio.Tools["Imprimir"].SharedProps;
      with_11.AppearancesLarge.Appearance.Image = clsImagenes.Imprimir;
      with_11.AppearancesSmall.Appearance.Image = with_11.AppearancesLarge.Appearance.Image;
      Infragistics.Win.UltraWinToolbars.SharedProps with_12 = utmMedio.Tools["ExportaraExcel"].SharedProps;
      with_12.AppearancesLarge.Appearance.Image = clsImagenes.Excel;
      with_12.AppearancesSmall.Appearance.Image = with_12.AppearancesLarge.Appearance.Image;
   }
   //'
   private ValueList AgregarValueListTipoCombo(DataRow DrObj)
   {
      ValueList obj_valueList = new ValueList();
      DataTable Dt;
      string strCampoDisplay;
      string strCampoValue;
      //'
      try
      {
         strCampoValue = DrObj["combovalue"].ToString();

         strCampoDisplay = DrObj["combodisplay"].ToString();
         Dt = clsBBDD.DtObtener(string.Format("SELECT {0},{1} FROM {2} Where {3}",
               strCampoValue, strCampoDisplay, DrObj["combotabla"],
               string.IsNullOrEmpty(DrObj["combofiltro"].ToString()) ? "1=1" : DrObj["combofiltro"]),
               DrObj["combotipoorigen"].ToString() == "cliente" ? clsVariables.e_TipoOrigen.Cliente : clsVariables.e_TipoOrigen.Sistema,
               false);

         //
         foreach (DataRow Dr in Dt.Rows)
         {
            obj_valueList.ValueListItems.Add(Dr[strCampoValue], Dr[strCampoDisplay].ToString());
         }
         //
         obj_valueList.SortStyle = ValueListSortStyle.Ascending;
         obj_valueList.ValueListItems.Add(string.Empty, string.Empty);
         return obj_valueList;
         //
      }
      catch (Exception ex)
      {
         Utiles.Errores.LanzarError(FormNavegador, "AgregarToValueListSegunTipoCampo", "", ex, MessageBoxIcon.Exclamation, true);
         obj_valueList = null;

         return null;
      }
   }
   //'
   private ValueList AgregarToValueListSegunTipoCampo(string str_TipoCampo) //!!Crear columna filtro (2ª)
   {
      ValueList obj_valueList = new ValueList();
      //'
      try
      {
         //
         switch (str_TipoCampo.ToLower())
         {
            case "combo":
               obj_valueList.ValueListItems.Add("= {0}", "=");
               break;
            //
            case "string":
               obj_valueList.ValueListItems.Add("= \'{0}\'", "=");
               obj_valueList.ValueListItems.Add("<> \'{0}\'", "<>");
               obj_valueList.ValueListItems.Add("like \'%{0}%\'", "Contenga");
               obj_valueList.ValueListItems.Add("not like \'%{0}%\'", "No Contenga");
               obj_valueList.ValueListItems.Add("like \'{0}%\'", "Comienze");
               obj_valueList.ValueListItems.Add("like \'%{0}\'", "Acabe");
               break;
            //
            case "boolean":
               obj_valueList.ValueListItems.Add("= {0}", "Activo/Inactivo");
               break;
            //
            case "date":
            case "time":
            case "datetime":
            case "decimal":
            case "double":
            case "integer":
               obj_valueList.ValueListItems.Add("= {0}", "=");
               obj_valueList.ValueListItems.Add("> {0}", ">");
               obj_valueList.ValueListItems.Add("< {0}", "<");
               obj_valueList.ValueListItems.Add("<= {0}", "<=");
               obj_valueList.ValueListItems.Add(">= {0}", ">=");
               obj_valueList.ValueListItems.Add("<> {0}", "<>");
               break;
         }
         //
         //
         return obj_valueList;
         //
      }
      catch (Exception ex)
      {
         Utiles.Errores.LanzarError(FormNavegador, "AgregarToValueListSegunTipoCampo", "", ex, MessageBoxIcon.Exclamation, true);
         obj_valueList = null;

         return null;
      }
   }
   //'
   #region  Opciones y Acciones toolbars
   public void utmMedio_ToolClick(System.Object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
   {
      System.Collections.Generic.List<string> LstFiltros;
      string strValorFiltro = string.Empty;
      //'
      try
      {
         Cursor.Current = Cursors.WaitCursor;
         //Opciones del Menú
         switch (e.Tool.Key)
         {
            case "ExportaraExcel":
               LstFiltros = new System.Collections.Generic.List<string>();
               //
               foreach (UltraGridRow Ugr in ugFiltros.Rows)
               {
                  strValorFiltro = Ugr.Cells["ValorFiltro"].Value.ToString();
                  if (!string.IsNullOrEmpty(strValorFiltro))
                  {
                     LstFiltros.Add(string.Format("[{0}] {1}", Ugr.Cells["Campos"].Value, strValorFiltro));
                  }
               }
               //
               Utiles.UtilInfragistics.Ctrl_UltraGrid.ExportGridToExcel(ugCampos, "", true,
                                             UtilInfragistics.Ctrl_UltraGrid.eIdioma.Espanyol, true, LstFiltros);
               break;
            //
            case "Salir":

               FormNavegador.Close();
               break;
            case "Anyadir":

               Anyadir();
               break;
            case "Editar":

               Editar(null, null);
               break;
            case "Eliminar":

               Eliminar();
               break;
            //
         }
      }
      catch (Exception ex)
      {
         Utiles.Errores.LanzarError(FormNavegador, "utmMedio_ToolClick", "", ex, MessageBoxIcon.Exclamation, true);
      }
      finally
      {
         Cursor.Current = Cursors.Default;
      }
   }
   //'
   public void Eliminar() //TODO: Privilegios
   {
      int i;

      DataTable DtCampos;
      Exception Ex = null;
      bool bol_ActualizarDatos = false;
      //'
      try
      {
         //if (MessageBox.Show("Esta seguro que desea eliminar los elementos seleccionados?", MessageBoxIcon.Information + MessageBoxIcon.YesNo + MessageBoxIcon.DefaultButton2, "Ateción") == MsgBoxResult.Yes)
         if (MessageBox.Show("Esta seguro que desea eliminar los elementos seleccionados?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
         {
            ugCampos.PerformAction(UltraGridAction.CommitRow); //Actualizar fila actual
            DtCampos = (DataTable)ugCampos.DataSource;
            //
            //Borrar elementos seleccionados. Copyright: SC
            i = 0;
            for (int j = 0; j <= ugCampos.DisplayLayout.Rows.Count - 1; j++)
            {
               Alias_UltraWinGrid.UltraGridRow Dr = ugCampos.DisplayLayout.Rows[i];
               //
               if (!Dr.IsFilteredOut) //Sino está filtrada
               {
                  if (Convert.ToInt16(Dr.Cells["Seleccionar"].Value) == 1)
                  {

                     ((DataRowView)Dr.ListObject).Row.Delete();
                     bol_ActualizarDatos = true;
                  }
                  else
                  {

                     i++;
                  }
               }
               //
            }
            //
            //Actualizar borrado
            if (bol_ActualizarDatos)
            {
               Ex = clsBBDD.EjecutarUpdate(ref DtCampos, "SELECT * FROM " + p_ObjetoFuenteNoVista, OrigenDatos);
               if (Ex == null)
               {

                  ugCampos.DataBind();
                  MessageBox.Show("Operación realizada con éxito", "Ok");
               }
               else
               {

                  throw (new Exception(Ex.Message, Ex));
               }
            }
            //
         }
         //'
      }
      catch (Exception ex2)
      {
         Utiles.Errores.LanzarError(FormNavegador, "Eliminar", "", ex2, MessageBoxIcon.Exclamation, true);
      }
   }
   //'
   public void Editar(object sender, Alias_UltraWinGrid.DoubleClickRowEventArgs e) //TODO: Privilegios
   {
      //Si tiene permisos
      if (ugCampos.ActiveRow != null)
      {
         ComunAnyadirEditar(((DataRowView)ugCampos.ActiveRow.ListObject).Row, mtoBase.eTipoAccion.Editar);
      }
   }
   //'
   public void Anyadir() //TODO: Privilegios
   {
      DataRow Dr;

      DataTable DtugCampos;
      System.Reflection.Assembly m_asmAssembly;
      //'
      if (ugCampos.DataSource == null) //Sino se pulso aplicar filtro
      {
         sSql = string.Format("SELECT 0 Seleccionar, {0}.* FROM {0} WHERE 1 = 0", p_ObjetoFuente);
         AplicarFiltroComun(sSql, mtoBase.eTipoAccion.Anyadir); //Cargar solo estructura tabla
      }
      //
      m_asmAssembly = System.Reflection.Assembly.GetExecutingAssembly();
      frmMantenimiento = (mtoBase)m_asmAssembly.CreateInstance("mto" + p_ObjetoFuenteNoVista, true);
      //
      DtugCampos = (DataTable)ugCampos.DataSource;
      Dr = DtugCampos.NewRow();
      ComunAnyadirEditar(Dr, mtoBase.eTipoAccion.Anyadir);
   }
   //'
   private void ComunAnyadirEditar(DataRow RowDestino, mtoBase.eTipoAccion pTipoAccion)
   {
      frmMantenimiento.p_ObjetoFuente = p_ObjetoFuenteNoVista;

      frmMantenimiento.p_OrigenDatos = OrigenDatos;
      frmMantenimiento.Text = "Mantenimiento " + p_ObjetoFuenteNoVista;
      frmMantenimiento.TipoAccion = pTipoAccion;
      frmMantenimiento.NavUgDatos = ugCampos;
      frmMantenimiento.NavOrigen = this;
      frmMantenimiento.RowDatos = RowDestino; //ugCampos.ActiveRow.ListObject.row
      frmMantenimiento.ShowDialog(); //No se limpia aunque haga el close... supongo q es por este With.. me conviene dejarlo así? No lo se
   }
   //'
   public void utbCabecera_ToolClick(System.Object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
   {
      try
      {
         Cursor.Current = Cursors.WaitCursor;
         //Opciones del Menú
         switch (e.Tool.Key)
         {
            case "AplicarFiltro":

               AplicarFiltro();
               break;
            case "BorrarFiltro":

               EliminarFiltro();
               break;
            case "OcultarFiltro":

               OcultarFiltro();
               break;
            case "MostrarFiltro":

               MostrarFiltro();
               break;
         }
      }
      catch (Exception ex)
      {
         Utiles.Errores.LanzarError(FormNavegador, "utbCabecera_ToolClick", "", ex, MessageBoxIcon.Exclamation, true);
      }
      finally
      {
         Cursor.Current = Cursors.Default;
      }
   }

   //------------------Acciones botones
   private void OcultarFiltro()
   {
      //
      for (int intNTools = 0; intNTools <= utmCabecera.Tools.Count - 1; intNTools++)
      {
         if (utmCabecera.Tools[intNTools] is Infragistics.Win.UltraWinToolbars.ButtonTool && utmCabecera.Tools[intNTools].Key.Trim() == "MostrarFiltro")
         {
            utmCabecera.Tools[intNTools].SharedProps.Visible = true;
         }
         else
         {
            utmCabecera.Tools[intNTools].SharedProps.Visible = false;
         }
      }
      //
      sc_Principal.Panel1Collapsed = true;
   }

   private void MostrarFiltro()
   {
      int intNTools;
      //'
      //utmCabecera.Tools("MostrarFiltro").SharedProps.Visible = False
      for (intNTools = 0; intNTools <= utmCabecera.Tools.Count - 1; intNTools++)
      {
         //If utmCabecera.Tools(intNTools).GetType.FullName = "UltraWinToolbars.ButtonTool" And _
         // utmCabecera.Tools(intNTools).Key.Trim = "MostrarFiltro" Then
         Infragistics.Win.UltraWinToolbars.ToolBase with_1 = utmCabecera.Tools[intNTools];
         if (with_1.Key.Trim() == "MostrarFiltro")
         {

            with_1.SharedProps.Visible = false;
         }
         else
         {

            with_1.SharedProps.Visible = true;
         }
      }
      sc_Principal.Panel1Collapsed = false;
   }
   //
   private void EliminarFiltro()
   {
      ugFiltros.CellChange -= new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
      ugFiltros.AfterCellUpdate -= new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
      //
      foreach (UltraGridRow Ugr in ugFiltros.Rows)
      {
         Ugr.Cells["ValorFiltro"].Value = string.Empty;
         Ugr.Cells["strWhere"].Value = string.Empty;
      }
      //
      ugFiltros.AfterCellUpdate += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
      ugFiltros.CellChange += new Alias_UltraWinGrid.CellEventHandler(ugFiltros_AfterCellUpdate);
   }
   //
   internal void AplicarFiltro()
   {
      string sSql = string.Empty;
      string strWhere = string.Empty;
      string strJoinUsuarioFecha = string.Empty; //Ojo! Cambian según la apliación
      string strCamposUsuarioFecha = string.Empty; //Ojo! Cambian según la apliación
      //'
      //With ugFiltros 'Actualizar filtros 'Y alo he hecho antes de llamar aki. Fuera
      //   .PerformAction(UltraGridAction.ExitEditMode)
      //   .PerformAction(UltraGridAction.CommitRow)
      //End With
      //
      //Crear la sentencia q recupera el usaruic y m descripcion y el join para obtenerlo
      if (_bolUsuariosFechasAutomatico)
      {
         strCamposUsuarioFecha = " CONCAT(CONCAT(CONCAT(CONCAT(TRIM(`u2`.`nombre`), \' \'), TRIM(`u2`.`primerapellido`)),\' \'),	" + " TRIM(`u2`.`segundoapellido`)) nombreusuariocreador " + ", CONCAT(CONCAT(CONCAT(CONCAT(TRIM(`u3`.`nombre`), \' \'), TRIM(`u3`.`primerapellido`)),\' \'),	" + " TRIM(`u3`.`segundoapellido`)) nombreusuariomodificador ";
         strJoinUsuarioFecha = " LEFT JOIN `macasistema`.`usuarios` u2 ON (`tbl`.`idusuarioc` = `u2`.`idusuario`) " + " LEFT JOIN `macasistema`.`usuarios` u3 ON (`tbl`.`idusuariom` = `u3`.`idusuario`) ";
         sSql = string.Format(" SELECT 0 Seleccionar, tbl.*, {1} FROM {0} tbl {2} WHERE 1 = 1 ", p_ObjetoFuente, strCamposUsuarioFecha, strJoinUsuarioFecha);
      }
      else
      {
         sSql = string.Format(" SELECT 0 Seleccionar, tbl.* FROM {0} tbl WHERE 1 = 1 ", p_ObjetoFuente);
      }
      //
      //Recorrer el grid de filtro y ir construyendo la sentencia Where
      foreach (UltraGridRow ugR in ugFiltros.Rows)
      {
         strWhere = ugR.Cells["strWhere"].Value.ToString();
         if (!string.IsNullOrEmpty(strWhere))
         {
            strWhere = "tbl." + ugR.Cells["campos"].Value.ToString() + " " + strWhere;
            sSql += " AND " + strWhere;
         }
      }
      //
      AplicarFiltroComun(sSql); //Cargar los datos del grid Campos
   }
   //
   /// <summary>
   /// Cargar los datos del grid Campos. Se usa en varios sitios
   /// </summary>
   /// <param name="strSql"></param>
   /// <remarks></remarks>
   private void AplicarFiltroComun(string strSql, mtoBase.eTipoAccion TipoAccion = mtoBase.eTipoAccion.Anyadir)
   {
      DataTable DtOrigenDatos;
      //'
      DtOrigenDatos = clsBBDD.DtObtener(strSql, OrigenDatos, true); //Obtener datos grid
      if (DtOrigenDatos == null || DtOrigenDatos.Rows.Count == 0)
      {
         utmMedio.Tools["Eliminar"].SharedProps.Enabled = false;
         utmMedio.Tools["Editar"].SharedProps.Enabled = false;
         if (!bolBusquedatiempoReal && !bolNavTipoGrid && !(TipoAccion == mtoBase.eTipoAccion.Anyadir))
         {
            MessageBox.Show("Sin resultados en la consulta", "Resultado", MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
         //
      }
      else if (DtOrigenDatos.Rows.Count > 0)
      {
         utmMedio.Tools["Eliminar"].SharedProps.Enabled = true;
         utmMedio.Tools["Editar"].SharedProps.Enabled = true;
         TotalRegistros = DtOrigenDatos.Rows.Count;
      }
      ugCampos.DataSource = DtOrigenDatos; //!! CArga datos en ugCAmpos
   }
   //
   public Infragistics.Win.UltraWinStatusBar.UltraStatusPanel NavegadorDevolverPanel(EPanelInfoExtra PanelInfoExtra)
   {
      //usbPie.Panels["InfoExtra1"].Visible = false;
      //usbPie.Panels["InfoExtra2"].Visible = false;
      //usbPie.Panels["InfoExtra3"].Visible = false;
      switch (PanelInfoExtra)
      {
         case EPanelInfoExtra.Panel1: usbPie.Panels["InfoExtra1"].Visible = true; return usbPie.Panels["InfoExtra1"];
         case EPanelInfoExtra.Panel2: usbPie.Panels["InfoExtra2"].Visible = true; return usbPie.Panels["InfoExtra2"];
         case EPanelInfoExtra.Panel3: usbPie.Panels["InfoExtra3"].Visible = true; return usbPie.Panels["InfoExtra3"];
         default: return null;
      }
   }
   //
   /// <summary>
   /// Escribe texto en los paneles del navegador
   /// </summary>
   /// <param name="strValorPanel">TExto ha agregar</param>
   /// <param name="PanelInfoExtra">Panel origen</param>
   /// <param name="AgregarATextoExistente">El texto sustituye el actual o se agrega al actual?</param>
   public void NavegadorSetInfoExtra(string strValorPanel, EPanelInfoExtra PanelInfoExtra,
                                                   bool bolAgregarATextoExistente = false)
   {
      Infragistics.Win.UltraWinStatusBar.UltraStatusPanel PanelObjetivo = null;
      //usbPie.Panels["InfoExtra1"].Visible = false;
      //usbPie.Panels["InfoExtra2"].Visible = false;
      //usbPie.Panels["InfoExtra3"].Visible = false;
      //
      switch (PanelInfoExtra)
      {
         case EPanelInfoExtra.Panel1:
            PanelObjetivo = usbPie.Panels["InfoExtra1"];
            if (bolAgregarATextoExistente == false) { PanelObjetivo.Text = ""; } break;
         case EPanelInfoExtra.Panel2:
            PanelObjetivo = usbPie.Panels["InfoExtra2"];
            if (bolAgregarATextoExistente == false) { PanelObjetivo.Text = ""; } break;
         case EPanelInfoExtra.Panel3:
            PanelObjetivo = usbPie.Panels["InfoExtra3"];
            if (bolAgregarATextoExistente == false) { PanelObjetivo.Text = ""; } break;
      }
      PanelObjetivo.Text += strValorPanel; PanelObjetivo.Visible = true;
   }
   //
   #endregion
   //'
   private void ugCampos_BeforeRowActivate(object sender, Alias_UltraWinGrid.RowEventArgs e)
   {
      RegistroActual = e.Row.Index + 1;
   }
   //'
   /// <summary>
   /// Después de modificar un valor, recalcular la sentencia Where.
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   /// <remarks></remarks>
   private void ugFiltros_AfterCellUpdate(object sender, Alias_UltraWinGrid.CellEventArgs e)
   {
      string strValor = string.Empty;
      string strTituloCelda = "a";
      //'
      //
      if (e.Cell.Column.Key.ToLower() != "strwhere" && e.Cell.IsInEditMode) //Si está en modo edición. SAlta 2 veces por entrar en Where pero no entra en el IF
      {
         strTituloCelda = e.Cell.Column.Header.Caption.Trim();
         //RemoveHandler ugFiltros.AfterCellUpdate, AddressOf ugFiltros_AfterCellUpdate
         //RemoveHandler ugFiltros.CellChange, AddressOf ugFiltros_AfterCellUpdate
         //
         //Si es el combo actualizo
         if (strTituloCelda == "Condiciones")
         {
            ugFiltros.PerformAction(UltraGridAction.CommitRow);
            ugFiltros.PerformAction(UltraGridAction.ExitEditMode);
            ugFiltros.PerformAction(UltraGridAction.EnterEditMode);
         }
         //
         //
         if (strTituloCelda == "Filtro")
         {
            if (e.Cell.Style == Alias_UltraWinGrid.ColumnStyle.DropDownList)
            {
               ugFiltros.PerformAction(UltraGridAction.ExitEditMode); //Sino haces esto el value del e.cell (dropdownlist) está en nulo
               strValor = e.Cell.Value.ToString();
            }
            else
            {

               strValor = e.Cell.Text;
            }
            //
         }
         else
         {

            strValor = e.Cell.Row.Cells["ValorFiltro"].Value.ToString();
         }
         //
         if (!string.IsNullOrEmpty(strValor))
         {
            //PerformAction(UltraGridAction.EnterEditMode) '.EnterEditModeAndDropdown
            e.Cell.Row.Cells["strWhere"].Value = string.Format(e.Cell.Row.Cells["Condiciones"].Value.ToString(), strValor, null);
         }
         else
         {
            e.Cell.Row.Cells["strWhere"].Value = string.Empty;
         }
         //
         //Busqueda en tiempo real
         if (bolBusquedatiempoReal && (strTituloCelda == "Filtro" || strTituloCelda == "Condiciones"))
         {
            //Dim intPosicionCursor As Integer
            //Dim oCell As UltraGridCell
            //'
            //oCell = .ActiveCell
            //intPosicionCursor = .ActiveCell.SelStart
            //Capturar el cell q tenemos activo
            AplicarFiltro();
            //.ActiveCell = oCell
            //.ActiveCell.Activate()
            //.PerformAction(UltraGridAction.EnterEditMode)
            //.ActiveCell.SelStart = intPosicionCursor
         }
         //
         //AddHandler ugFiltros.AfterCellUpdate, AddressOf ugFiltros_AfterCellUpdate
         //AddHandler ugFiltros.CellChange, AddressOf ugFiltros_AfterCellUpdate
      }
   }
   //'
   #region InitializeLayout
   //
   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
   private void ugFiltros_InitializeLayout(object sender, Alias_UltraWinGrid.InitializeLayoutEventArgs e)
   {
      DataRow DrNavCabecerayFiltros;
      DataTable DtNavCabecerayFiltros;
      ValueList oValueList;
      bool bolCampoTipoCombo;
      //Dim strValorDefecto As String
      //Dim DrFiltros As DataRow
      //'
      try
      {
         Alias_UltraWinGrid.UltraGridBand ugridFiltros = ugFiltros.DisplayLayout.Bands[0];
         //
         Alias_UltraWinGrid.UltraGridColumn ucCampos = ugridFiltros.Columns["Campos"];
         ucCampos.Hidden = true;
         //.CellActivation = Activation.ActivateOnly
         //.SortIndicator = SortIndicator.Disabled : .CellAppearance.BackColor = Color.Khaki : .TabStop = False
         //
         Alias_UltraWinGrid.UltraGridColumn ucCamposTitulo = ugridFiltros.Columns["CamposTitulo"];
         ucCamposTitulo.Width = 150;
         ucCamposTitulo.CellActivation = Activation.ActivateOnly;
         ucCamposTitulo.SortIndicator = SortIndicator.Disabled;

         ucCamposTitulo.CellAppearance.BackColor = Color.Khaki;
         ucCamposTitulo.TabStop = false;
         //
         Alias_UltraWinGrid.UltraGridColumn ucCondiciones = ugridFiltros.Columns["Condiciones"];
         ucCondiciones.CellActivation = Activation.AllowEdit;
         ucCondiciones.Style = Alias_UltraWinGrid.ColumnStyle.DropDownList;
         ucCondiciones.ButtonDisplayStyle = Alias_UltraWinGrid.ButtonDisplayStyle.Always;
         ucCondiciones.Width = 100;
         //
         Alias_UltraWinGrid.UltraGridColumn ucValorFiltro = ugridFiltros.Columns["ValorFiltro"];
         //.Style = ColumnStyle.DropDownList
         ucValorFiltro.CellActivation = Activation.AllowEdit;
         ucValorFiltro.SortIndicator = SortIndicator.Disabled;

         ucValorFiltro.Width = 250;
         ucValorFiltro.Header.Caption = "Filtro";
         //
         Alias_UltraWinGrid.UltraGridColumn ucstrWhere = ugridFiltros.Columns["strWhere"];
         ucstrWhere.Hidden = !clsVariables.bol_Pruebas;

         ucstrWhere.Width = 300;
         //
         //Uso una misma sql para recuperar la cabecera y los filtros (1 acceso menos a la bbdd)
         DtNavCabecerayFiltros = clsBBDD.DtObtener(String.Format(" SELECT nc.*,nf.* FROM navcabecera nc  LEFT JOIN navfiltros nf ON nf.idnav = nc.idnav  WHERE nc.idnav ={0} Order by orden", IdNavegador), clsVariables.e_TipoOrigen.Sistema, false);
         //
         //El orden importa
         DrNavCabecerayFiltros = DtNavCabecerayFiltros.Rows[0];
         OrigenDatos = ((DrNavCabecerayFiltros["OrigenDatos"].ToString().ToLower()).ToString().IndexOf("cliente") + 1 > 0) ? clsVariables.e_TipoOrigen.Cliente : clsVariables.e_TipoOrigen.Sistema;
         ObjetoFuente = DrNavCabecerayFiltros["ObjetoFuente"].ToString();
         _bolUsuariosFechasAutomatico = clsBBDD.DevolverBooleano(DrNavCabecerayFiltros["bolUsuariosFechasAutomatico"]);
         bolCargaAlIniciar = clsBBDD.DevolverBooleano(DrNavCabecerayFiltros["bolCargaAlIniciar"]);
         //ugCampos.DisplayLayout.Override.AllowRowFiltering = IIf(DevolverBooleano(.Item("bolfiltroinfragistics")), _
         //                                                        DefaultableBoolean.True, DefaultableBoolean.False) 'bol_PermitirFiltrar no funciona pq. InitialiteLayout del grid se ejecuta antes
         ugCampos.bol_PermitirFiltrar = clsBBDD.DevolverBooleano(DrNavCabecerayFiltros["bolfiltroinfragistics"]);
         ugCampos.arrAutoCalculoCampos = DrNavCabecerayFiltros["strautocalculocampos"].ToString().Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries);
         //
         bolBusquedatiempoReal = clsBBDD.DevolverBooleano(DrNavCabecerayFiltros["bolbusquedatiemporeal"]);
         utmMedio.Tools["ExportaraExcel"].SharedProps.Visible = clsBBDD.DevolverBooleano(DrNavCabecerayFiltros["bolMostrarBtnExcel"]); //Mostrar opción exportar Excel
         //
         //Recupera la info de los campos
         dtDefinicionCampos = clsBBDD.DtObtener(String.Format("SELECT * FROM Campos Where tabla = \'{0}\' or tabla = \'all\'", p_ObjetoFuenteNoVista), clsVariables.e_TipoOrigen.Sistema, false);
         //
         if (!string.IsNullOrEmpty(DrNavCabecerayFiltros["idnavfiltros"].ToString())) //Si hay filtros especificados (pq. solo es el grid p.e.)
         {
            //utmMedio.Tools("Eliminar").SharedProps.Visible = True 'TODO... gestión persmisos por grupo
            //
            foreach (DataRow Dr in DtNavCabecerayFiltros.Rows) //NO se puede agregar en DT de grid directo pq. he de crear el oValueList
            {
               //  DrFiltros = ugFiltros.DataSource.newrow
               ugridFiltros.AddNew();
               ugFiltros.ActiveRow.Cells["Campos"].Value = Dr["campo"]; //campos
               //
               bolCampoTipoCombo = (Dr["CampoTipo"].ToString().Trim() == "combo");
               try
               {
                  ugFiltros.ActiveRow.Cells["CamposTitulo"].Value = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Dr["campo"].ToString()); //De momento nombre campo como título
                  //
                  if (!string.IsNullOrEmpty(Dr["campotitulopersonal"].ToString()))
                  {
                     ugFiltros.ActiveRow.Cells["CamposTitulo"].Value = Dr["campotitulopersonal"]; //Si tiene título personalizado se lo pongo
                  }
                  else
                  {
                     DataRow[] Dr2 = dtDefinicionCampos.Select(string.Format("campo = \'{0}\'", Dr["campo"].ToString()));
                     ugFiltros.ActiveRow.Cells["CamposTitulo"].Value = Dr2[0]["descripcion"]; //Si el campo es tipo combo coge la descripcion de combovalue y no campo
                  }
                  //
               }
               catch (Exception) //NO hay info de este campo o dtdefinicion vale nothing
               {
               }
               //
               oValueList = AgregarToValueListSegunTipoCampo(Dr["CampoTipo"].ToString()); //!!Según el tipo de campo condiciones
               ugFiltros.ActiveRow.Cells["Condiciones"].ValueList = oValueList;
               ugFiltros.ActiveRow.Cells["Condiciones"].Value = oValueList.ValueListItems[0].DataValue; //Primera opción por defecto 'oValueList.SelectedIndex = 0:
               //
               if (!string.IsNullOrEmpty(Utiles.General.ScpIsNull(Dr["valordefecto"], string.Empty).ToString()))
               {
                  ugFiltros.ActiveRow.Cells["ValorFiltro"].Value = Dr["valordefecto"]; //Puede ser número o otro
                  ugFiltros.ActiveRow.Cells["strWhere"].Value = string.Format(ugFiltros.ActiveRow.Cells["Condiciones"].Value.ToString(),
                                                                                             Dr["valordefecto"].ToString()); //.Cells("Condiciones").Value = '={0}' por ejemplo
               }
               ugFiltros.ActiveRow.Cells["ValorFiltro"].Activation = (clsBBDD.DevolverBooleano(Dr["valordefectomodificable"])) ? Activation.AllowEdit : Activation.ActivateOnly;
               if (Dr["CampoTipo"].ToString() == "boolean")
               {
                  ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.CheckBox;
                  ugFiltros.ActiveRow.Cells["ValorFiltro"].Value = false;
                  //qbugFiltros.ActiveRow.Cells["strWhere"].Value = "= 0";
                  //ugFiltros.ActiveRow.Cells["ValorFiltro"].Appearance.BackColor = Color.Gainsboro;
                  //ugFiltros.ActiveRow.Cells["ValorFiltro"].Activation = Activation.NoEdit; //Solo se pueda cambiar por el combo                  
               }
               //
               if (bolCampoTipoCombo)
               {
                  ugFiltros.ActiveRow.Cells["ValorFiltro"].ValueList = AgregarValueListTipoCombo(Dr);
                  //ugFiltros.ActiveRow.Cells["ValorFiltro"].ValueList.SortByValue = false;
                  ugFiltros.ActiveRow.Cells["ValorFiltro"].Style = Alias_UltraWinGrid.ColumnStyle.DropDownList;
               }
               //
               ugFiltros.ActiveRow.Hidden = !clsBBDD.DevolverBooleano(Dr["visible"]);
            }
            //
         }
         else
         {

         }
         //
         if (bolCargaAlIniciar)
         {
            AplicarFiltro(); //Carga automática
         }
         //'
      }
      catch (Exception ex)
      {
         Utiles.Errores.LanzarError(FormNavegador, "ugFiltros_InitializeLayout", "Error al cargar nav filtros ", ex, MessageBoxIcon.Exclamation, true);
      }
   }
   //'
   /// <summary>
   /// Aplicar el formato cuando se le cargan datos
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   /// <remarks></remarks>
   [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ReadOnly(true)]
   private void ugCampos_InitializeLayout(object sender, Alias_UltraWinGrid.InitializeLayoutEventArgs e)
   {
      bool bol_TipoDatosNumerico = false;
      DataTable DtNavCampos;
      DataRow DrCampos;
      string strCampoActual = string.Empty;
      int intAnchoColumna;
      //'
      //
      try
      {
         //'Recuperar los campos que ha de mostrar conjuntamente con la definición de cada uno de ellos.. 'TODO. En BackGround
         //DtNavCampos = DtObtener(" SELECT nc.*,c.*,ncb.objetofuente FROM navcampos nc " & _
         //                        " LEFT JOIN campos c ON c.campo = nc.campo And c.tabla =  " & _
         //                        " LEFT JOIN navcabecera ncb ON ncb.idnav = nc.idnav " & _
         //                        " WHERE idnav =" & IdNavegador & _
         //                        " AND c.tabla = '" & p_ObjetoFuente & "' ORDER BY nc.ordengrid ", e_TipoOrigen.Sistema)  'Cargar Detalle Navegador
         DtNavCampos = clsBBDD.DtObtener(" SELECT nc.* FROM navcampos nc WHERE idnav =" + IdNavegador + " ORDER BY nc.ordengrid ", clsVariables.e_TipoOrigen.Sistema, false); //Cargar Detalle Navegador

         //
         //Ocultar todas las columnas
         Alias_UltraWinGrid.UltraGridBand ugCampoBanda0 = ugCampos.DisplayLayout.Bands[0];
         //
         foreach (UltraGridColumn ugC in ugCampoBanda0.Columns)
         {
            ugC.Hidden = true;
         }
         //
         //Formato por cada columna
         foreach (DataRow Dr in DtNavCampos.Rows)
         {
            strCampoActual = Dr["campo"].ToString();
            Console.WriteLine("<ugCampos_InitializeLayout> Campo actual: " + strCampoActual);
            Alias_UltraWinGrid.UltraGridColumn ugBandsColumnaActual = ugCampoBanda0.Columns[strCampoActual];
            //
            //Aprovecho y hago lo específico por columna
            switch (ugBandsColumnaActual.DataType.Name.ToUpper())
            {
               case "INTEGER":
               case "SHORT":
               case "LONG":
               case "BYTE":
               case "SINGLE":
                  ugBandsColumnaActual.CellAppearance.TextHAlign = HAlign.Right;

                  bol_TipoDatosNumerico = true;
                  break;
               //
               case "DOUBLE":
               case "DECIMAL":
                  ugBandsColumnaActual.CellAppearance.TextHAlign = HAlign.Right;
                  ugBandsColumnaActual.Format = "##,##0.00"; // : .MaskInput = "##,##"
                  bol_TipoDatosNumerico = true;

                  ugBandsColumnaActual.Style = Alias_UltraWinGrid.ColumnStyle.Double;
                  break;
               //
               case "BOOLEAN":
               case "SBYTE":
                  ugBandsColumnaActual.Style = Alias_UltraWinGrid.ColumnStyle.CheckBox;
                  break;
               case "DATETIME":

                  ugBandsColumnaActual.MaskInput = "dd/mm/yy hh:mm:ss";
                  break;
               case "DATE":

                  ugBandsColumnaActual.MaskInput = "dd/mm/yy";
                  break;
               case "TIME":

                  ugBandsColumnaActual.MaskInput = "hh:mm:ss tt";
                  break;
               case "STRING":
                  break;
            }
            //
            ugBandsColumnaActual.Hidden = !clsBBDD.DevolverBooleano(Dr["visualizar"]);
            //
            if (!ugBandsColumnaActual.Hidden) //Solo trato los visibles
            {
               try
               {
                  ugBandsColumnaActual.Header.Caption = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Dr["campo"].ToString().Replace("_", " ")); //De momento nombre campo como título
                  DrCampos = dtDefinicionCampos.Select(string.Format("campo = \'{0}\'", Dr["campo"]))[0];
                  //Si encuentra DrCampos
                  intAnchoColumna = (int)Utiles.General.ScpIsNull(DrCampos["longitudvisualizar"], ugBandsColumnaActual.Width);
                  ugBandsColumnaActual.Width = intAnchoColumna != 0 ? intAnchoColumna : ugBandsColumnaActual.Width; //sino tiene ancho asignado le deja el que tenía
                  ugBandsColumnaActual.Header.Caption = DrCampos["descripcion"].ToString();
               }
               catch (Exception) //NO hay info de este campo o dtdefinicion vale nothing
               {
               }
               //.Header.Caption = General.ScpIsNull(Dr("descripcion"), .Header.Caption) 'Sino encuentra descripción le deja el título del dt
               //
               //Orden columnas (no posición)
               if (bol_TipoDatosNumerico)
               {
                  ugBandsColumnaActual.SortComparer = new Utiles.UtilInfragistics.Ctrl_UltraGrid.srtComparer(ugBandsColumnaActual.Key);
               }
               //
               //Si no hay orden esto no hace falta. 100 es el valor por defecto para conservar la posición de las columnas
               if (!string.IsNullOrEmpty(Dr["ordengrid"].ToString()) && (int)Dr["ordengrid"] != 0 && (int)Dr["ordengrid"] != 100)
               {
                  ugBandsColumnaActual.SortIndicator = (clsBBDD.DevolverBooleano(Dr["ordendescendente"])) ? SortIndicator.Descending : SortIndicator.Ascending;
               }
               //
               //.Band.SortedColumns.RefreshSort(True) 'Refrescar orden grid 'Hará falta
               //
               if ((int)Utiles.General.ScpIsNull(Dr["posicioncolumnas"], 0) != 0)
               {
                  ugBandsColumnaActual.Header.VisiblePosition = (int)Dr["posicioncolumnas"]; //Posición
               }
               //if (ugCampos.arrAutoCalculoCampos.Length > 0)
               //{
               //   foreach (string strOperacion in ugCampos.arrAutoCalculoCampos)
               //   {
               //      switch (strOperacion.ToLower().Substring(0, 2))
               //      {
               //         //case "red":    r++;    break; 
               //         // su:suma, av:average, mi:minim, ma:maxim, co:count //NOTA: Está en el ccontrol del grid
               //         case "su": UtilInfragistics.Ctrl_UltraGrid.AgregarQuitarCalculoColumna(ugCampos, strOperacion, SummaryType.Sum);
               //         case "av": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
               //         case "mi": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
               //         case "ma": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
               //         case "co": ugCampoBanda0.Columns[strOperacion].AllowRowSummaries = AllowRowSummaries.True;
               //         default: break;
               //      }

               //   }
               //}
               ugBandsColumnaActual.Header.FixedHeaderIndicator = (Convert.ToBoolean(Dr["fijar"])) ? FixedHeaderIndicator.Button : FixedHeaderIndicator.None; //Mostrar fijar columnas
            } //If Not .Hidden Then 'Solo trato los visibles
            //
            //
         }
         //
         //Columna eliminar
         Alias_UltraWinGrid.UltraGridColumn ugcSeleccionar = ugCampoBanda0.Columns["Seleccionar"];
         //ugcSeleccionar.Header.FixedHeaderIndicator = FixedHeaderIndicator.Button;
         //ugcSeleccionar.Header.Fixed = true;
         //.Style = ColumnStyle.CheckBox ....'Todo esto en el primer initialytelayout
         //.Header.VisiblePosition = 0
         ugcSeleccionar.Hidden = !utmMedio.Tools["Eliminar"].SharedProps.Visible; //Mostra eliminar
         ugcSeleccionar.Width = 90;
         //ugcSeleccionar.Header.Fixed = true; //Ya lo hace en Ctrl_UltraGrid_InitializeLayout
         //.Header.Fixed = True '.FixedHeaderIndicator = FixedHeaderIndicator.Default
         //.CellClickAction = CellClickAction.Edit
         //.CellAppearance.BackColor = Color.Khaki
         //.DefaultCellValue = 0
         //
         //Columnas usuarios y fechas
         //If _bolUsuariosFechasAutomatico Then
         if (ugCampoBanda0.Columns.Exists("NombreUsuarioCreador"))
         {
            Alias_UltraWinGrid.UltraGridColumn with_5 = ugCampoBanda0.Columns["NombreUsuarioCreador"];
            with_5.Header.Caption = "Usuario Creador";

            with_5.Hidden = false;
            with_5.Header.VisiblePosition = 1000;
         }
         if (ugCampoBanda0.Columns.Exists("fechac"))
         {
            Alias_UltraWinGrid.UltraGridColumn with_6 = ugCampoBanda0.Columns["fechac"];
            with_6.Header.Caption = "Fecha Creación";

            with_6.Hidden = false;
            with_6.Header.VisiblePosition = 1001;
         }
         if (ugCampoBanda0.Columns.Exists("NombreUsuarioModificador"))
         {
            Alias_UltraWinGrid.UltraGridColumn with_7 = ugCampoBanda0.Columns["NombreUsuarioModificador"];
            with_7.Header.Caption = "Usuario Modificador";

            with_7.Hidden = false;
            with_7.Header.VisiblePosition = 1002;
         }
         if (ugCampoBanda0.Columns.Exists("fecham"))
         {
            Alias_UltraWinGrid.UltraGridColumn with_8 = ugCampoBanda0.Columns["fecham"];
            with_8.Header.Caption = "Fecha Modificación";

            with_8.Hidden = false;
            with_8.Header.VisiblePosition = 1003;
         }
         //End If
         //
      }
      catch (Exception ex)
      {
         Utiles.Errores.LanzarError(FormNavegador, "ugCampos_InitializeLayout", "Error al cargar nav campos. Campo actual: " + strCampoActual, ex, MessageBoxIcon.Exclamation, true);
      }
   }
   //'
   #endregion
   //'
   ~Ctrl_NavBase()
   {
      base.Dispose();
      ugCampos = null; ugFiltros = null; frmMantenimiento = null; rptNavegador = null; dtDefinicionCampos = null;
   }
}
